package com.kaigao.demo.handler;

import com.kaigao.demo.utils.ErrorCode;
import com.kaigao.demo.utils.ResultModel;
import com.kaigao.demo.utils.ValidateException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

/**
 * @ClassName GlobalControllerExceptionHandler.java
 * @Description 功能描述：
 * @author 吴昊 2018年3月18日22:37:01
 */
@ControllerAdvice(annotations = RestController.class)
public class GlobalControllerExceptionHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(GlobalControllerExceptionHandler.class);

    /**
     * @Description 方法描述：运行时系统 其他异常
     * @author 吴昊 2018年3月18日22:37:09
     * @param e
     * @return
     */
    @ExceptionHandler
    @ResponseBody
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    private ResultModel<Boolean> runtimeExceptionHandler(Exception e) {
        LOGGER.error("---------> system huge error!", e.getMessage());
        e.printStackTrace();
        ResultModel<Boolean> result = new ResultModel<>();
        result.setReturnValue(false);
        result.setErrorCode(ErrorCode.SERVER_ERROR.getErrorCode());
        result.setErrorDesc(ErrorCode.SERVER_ERROR.getErrorMessage());
        return result;
    }

    /**
     * @Description 方法描述： 自定义异常
     * @author 吴昊 2018年3月18日22:37:17
     * @param e
     * @return
     */
    @ExceptionHandler(ValidateException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    private ResultModel<Boolean> validateExceptionHandler(ValidateException e) {
        LOGGER.warn("---------> system warn!", e.getMessage());
        e.printStackTrace();
        ResultModel<Boolean> result = new ResultModel<>();
        result.setReturnValue(false);
        result.setErrorCode(ErrorCode.ILLEGAL_PARAMS.getErrorCode());
        result.setErrorDesc(ErrorCode.ILLEGAL_PARAMS.getErrorMessage());
        return result;
    }

}
